package com.briup.day16;

import java.io.IOException;
import java.sql.SQLException;

/**
 * @author lining
 * @date 2024/1/28 10:22
 */
public class Test5 {
    /*
       通过try catch代码块程序员手动处理异常的过程
     */
    public void method(String className){
        System.out.println("代码1");
        try{
            System.out.println("代码2");
            Class.forName(className);//打印异常，停止执行剩余代码
            System.out.println("代码3");//forName是否抛出异常，抛出后不会执行try剩余代码
        }catch (ClassNotFoundException e){
            //当抛出异常，将代码进入catch语句块执行
            System.out.println("代码4");
            System.out.println("由ForName方法抛出的异常对象："+e);
            //1.和JVM相同处理方式，将异常信息打印到控制台
            e.printStackTrace();
            //2.通过方法或异常的提示信息
            String message = e.getMessage();
            System.out.println("异常提示信息："+message);//abc
        }
        System.out.println("代码5");
    }
    public void method2(int num) {
        //处理逻辑：1.继续抛出(默认)  2.手动处理
        try{
            System.out.println(10 / num);//当num=0
        }catch (Exception e){
            //默认处理方法，打印
            e.printStackTrace();
        }
        //实现剩余的代码执行
        System.out.println("代码1");
    }
    public void method3(){
        //调用一个方法
        Test3 t = new Test3();
        try{
            t.getIOXXX("SQL");
        }catch (IOException e){
            e.printStackTrace();
        }catch (SQLException e){
            System.out.println(e.getMessage());
        }catch (ClassNotFoundException e){
            //发短信...提示
        }
    }
    public void method4(){
        //调用一个方法
        Test3 t = new Test3();
        try{
            t.getIOXXX("SQL");
        }catch (IOException|SQLException|ClassNotFoundException e){
            e.printStackTrace();
        }
    }
    public void method5(){
        //调用一个方法
        Test3 t = new Test3();
        try{
            t.getIOXXX("SQL");//发生异常。跳转到catch代码块执行
            System.out.println(1/0);
            System.out.println(Integer.valueOf("你好"));
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("代码2");
    }

    public void method6(){
        //调用一个方法
        Test3 t = new Test3();
        try{
            t.getIOXXX("SQL");//发生异常。跳转到catch代码块执行
        }catch (Exception e){
            //e对象表示什么异常类型？有3种情况
            if(e instanceof IOException){
                //处理方式
            }
            if(e instanceof  SQLException){
                //处理方式
            }
        }
        System.out.println("代码2");
    }

    public static void main(String[] args) throws Exception{
        Test5 t = new Test5();
        //t.method("abc");//代码1 代码2
        t.method2(0);
    }
}
